From a6225e1b23589fecbfb049da6fb3c02f10ac2884 Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Fri, 24 Oct 2008 11:38:09 +0900 Subject: [PATCH] [IA64] allow __assign_domain_page() to assign real MMIO page over _PAGE_IO. When VTD is enabled on HVM domain, P2M entry may change from _PAGE_IO to real MMIO page. Signed-off-by: Anthony Xu --- xen/arch/ia64/xen/mm.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/xen/arch/ia64/xen/mm.c b/xen/arch/ia64/xen/mm.c index f6a4b7eb1d..9cf861f5eb 100644 --- a/xen/arch/ia64/xen/mm.c +++ b/xen/arch/ia64/xen/mm.c @@ -917,11 +917,19 @@ __assign_domain_page(struct domain *d, old_pte = __pte(0); new_pte = pfn_pte(physaddr >> PAGE_SHIFT, __pgprot(prot)); + again_hvm_page_io: ret_pte = ptep_cmpxchg_rel(&d->arch.mm, mpaddr, pte, old_pte, new_pte); if (pte_val(ret_pte) == pte_val(old_pte)) { smp_mb(); return 0; } + /* in HVM guest, when VTD is enabled, + * P2M entry may change from _PAGE_IO type to real MMIO page + */ + if(VMX_DOMAIN(d->vcpu[0]) && (pte_val(ret_pte) & _PAGE_IO)) { + old_pte = ret_pte; + goto again_hvm_page_io; + } // dom0 tries to map real machine's I/O region, but failed. // It is very likely that dom0 doesn't boot correctly because -- 2.30.2